今天要來介紹 Kubernetes 中最小的運作單位 Pod。
通常一個 Pod 會代表一個 Application,常見情形也會是一個 Container,
InitContainer 與一般 containers 相似,差別是當啟動該 Pod 時,必須先運行 initContainer,並按照 init containers 區塊中的容器順序一一啟動直到成功結束,如果過程中有任何 initContainer 無法成功完成,則 Kubernetes 會不斷重複啟動,而後才算是 Pod 完成就緒。但若設定 restartPolicy
為 Never,且在 initContainer 過程失敗,則將被視為整個 Pod failed。
上述也表明,init container 並不會與一般 container 同時並存在 Pod 上,因為它們必須在 Pod 啟動之前準備好。
基本建立 Pod example 如下,主要有四個關鍵區域,分別為:
# Pod yaml file
apiVersion: v1
kind: Pod
metadata:
name: podname
spec:
containers:
- name: nginx
image: nginx:1.14.2
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'git clone <some-repository-that-will-be-used-by-application> ;']
基本操作語法如下:
$ kubectl create -f pod-sample.yaml
# Output only pod in default namespace
# pod/podname created
$ kubectl get pods
# Output
# NAME READY STATUS RESTARTS AGE
# podname 1/1 Running 0 17s
$ kubectl get pods -A
# Output all pods
$ kubectl describe pod
# Output more detailed about pod
# including Containers, Conditions, and Events.
顧名思義,即是在 Pod 中擁有多個 containers,它們共享該 Pod 的網路、volume、file system 以及整個 Pod 的 lifecycle,也就是 Pod 內的 containers 都將共生共滅。
Multi-Container Pod 有三種模式:
圖片取自 Multi-Container Pod Design Patterns in Kubernetes, 此篇內文有三者更詳細介紹及示例。
# Multi-Containers Pod
apiVersion: v1
kind: Pod
metadata:
name: simple-web
labels:
name: simple-web
spec:
containers:
- name: simple-web
image: simple-web
ports:
- containerPort: 8080
- name: log-agent
image: log-agent
更多細節可參考 The Distributed System ToolKit: Patterns for Composite Containers。
The greatest glory in living, lies not in never falling, but in rising every time we fall.
共勉之